package com.shujia.wyh.day14.tcpdemo1;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/*
    1:建立服务器端的socket服务，需要一个端口
    2:服务端没有直接流的操作,而是通过accept方法获取客户端对象，在通过获取到的客户端对象的流和客户端进行通信
    3:通过客户端的获取流对象的方法,读取数据或者写入数据
    4:如果服务完成,需要关闭客户端,然后关闭服务器，但是,一般会关闭客户端,不会关闭服务器,因为服务端是一直提供服务的

 */
public class ServerDemo1 {
    public static void main(String[] args) throws Exception {
        //ServerSocket
        ServerSocket ss = new ServerSocket(12345);

        try {
            //监听客户端的连接
            Socket socket = ss.accept();
            while (true){
                //获取通道中输入流对象
                InputStream is = socket.getInputStream();
                byte[] bytes = new byte[1024];
                int length = is.read(bytes);
                String info = new String(bytes, 0, length);
                String ip = socket.getInetAddress().getHostAddress();
                String hostName = socket.getInetAddress().getHostName();
                System.out.println("接收到用户：" + ip + "," + hostName + "发来一条消息：" + info);


                //给客户端一个反馈
                //获取通道中的输出流对象
                OutputStream outputStream = socket.getOutputStream();
                outputStream.write("服务器端已经收到！！".getBytes());
                outputStream.flush();
            }
        }catch (Exception e){
            System.out.println("客户端已经下线。。。。");
        }





        //关闭资源
//        ss.close(); //服务器一般来说非必要情况不会关闭
    }
}
